<template>
  <el-form
    ref="form"
    :model="user"
    :rules="rules"
    label-width="80px"
  >
    <el-form-item
      label="旧密码"
      prop="oldPassword"
    >
      <el-input
        v-model="user.oldPassword"
        placeholder="请输入旧密码"
        type="password"
      />
    </el-form-item>
    <el-form-item
      label="新密码"
      prop="newPassword"
    >
      <el-input
        v-model="user.newPassword"
        placeholder="请输入新密码"
        type="password"
      />
    </el-form-item>
    <el-form-item
      label="确认密码"
      prop="confirmPassword"
    >
      <el-input
        v-model="user.confirmPassword"
        placeholder="请确认密码"
        type="password"
      />
    </el-form-item>
    <el-form-item>
      <el-button
        type="primary"
        size="mini"
        @click="submit"
      >
        保存
      </el-button>
      <el-button
        type="danger"
        size="mini"
        @click="close"
      >
        关闭
      </el-button>
    </el-form-item>
  </el-form>
</template>

<script lang='ts'>
import { defineComponent, reactive, ref, toRefs, unref } from 'vue'
import { updateUserPwd } from '@/apis/system/user'
import { ElForm, ElMessage } from 'element-plus'
import { useRouter, useRoute } from 'vue-router'
import { useStore } from '@/store'
import { TagsActionTypes } from '@/store/modules/tagsview/action-types'
export default defineComponent({
  setup() {
    const formRef = ref(ElForm)
    const user = ref({
      oldPassword: undefined,
      newPassword: undefined,
      confirmPassword: undefined
    })
    const equalToPassword = (rule?: any, value?: any, callback?: any) => {
      if (user.value.newPassword !== value) {
        callback(new Error('两次输入的密码不一致'))
      } else {
        callback()
      }
    }
    const dataMap = reactive({
      test: '1test',

      // 表单校验
      rules: {
        oldPassword: [
          { required: true, message: '旧密码不能为空', trigger: 'blur' }
        ],
        newPassword: [
          { required: true, message: '新密码不能为空', trigger: 'blur' },
          { min: 6, max: 20, message: '长度在 6 到 20 个字符', trigger: 'blur' }
        ],
        confirmPassword: [
          { required: true, message: '确认密码不能为空', trigger: 'blur' },
          { required: true, validator: equalToPassword, trigger: 'blur' }
        ]
      }
    })

    const submit = () => {
      const form = unref(formRef)
      form.validate((valid: any) => {
        if (valid) {
          updateUserPwd(user.value.oldPassword, user.value.newPassword).then(
            () => {
              ElMessage.success('修改成功')
            }
          )
        }
      })
    }

    const close = () => {
      useStore().dispatch(TagsActionTypes.ACTION_DEL_VIEW, useRoute())
      useRouter().push({ path: '/index' })
    }
    return { ...toRefs(dataMap), equalToPassword, user, submit, close }
  }
})

</script>
